package com.richard.room.app;

import android.app.Application;
import android.os.StrictMode;

import com.richard.library.context.AppContext;
import com.richard.room.operator.api.RoomOperator;

/**
 * @author: Richard
 * @createDate: 2023/8/7 11:59
 * @version: 1.0
 * @description: 描述
 */
public class App extends Application {

    @Override
    public void onCreate() {
        super.onCreate();
        this.init();
    }

    private void init(){
        AppContext.init(this,true);

        if(AppContext.isDebug()){
            // 线程策略（检测主线程问题）
            StrictMode.ThreadPolicy threadPolicy = new StrictMode.ThreadPolicy.Builder()
                    //.detectDiskReads()      // 检测磁盘读
                    //.detectDiskWrites()     // 检测磁盘写
                    .detectNetwork()        // 检测网络请求
                    .detectCustomSlowCalls() // 检测自定义慢方法
                    .penaltyLog()           // 违例时输出日志
                    .penaltyDialog()        // 违例时弹窗（仅Debug）
                    .build();
            StrictMode.setThreadPolicy(threadPolicy);

            // 虚拟机策略（检测内存问题）
            StrictMode.VmPolicy vmPolicy = new StrictMode.VmPolicy.Builder()
                    .detectLeakedSqlLiteObjects()    // 检测SQLite对象未关闭
                    .detectLeakedClosableObjects()   // 检测Closable资源未关闭
                    .detectActivityLeaks()           // 检测Activity泄漏
                    //.setClassInstanceLimit(MainActivity.class, 1) // 限制类实例数量
                    .penaltyLog()
                    .penaltyDeath()                  // 严重违例时崩溃应用
                    .build();
            StrictMode.setVmPolicy(vmPolicy);
        }

        RoomOperator.PRINT_SQL_LOG = true;

        DB.init(this);
    }
}
